const express = require('express')
const xlsx = require('xlsx')
const { sendResponse } = require('../utils/sendResponse.js')
const { getFilePath } = require('../utils/constants.js') // 引入常量

const router = express.Router()
// 使用绝对路径
const filePath = getFilePath('articles')

// 分页查询文章接口 (可选按时间、浏览量或点赞量排序)
router.get('/getArticles', (req, res) => {
  const { pageIndex = 1, pageSize = 10, sortBy = '创建时间', order = '降序' } = req.query

  const validSortFields = ['创建时间', '浏览量', '点赞量']
  const validOrder = ['升序', '降序']

  // 验证排序字段和顺序是否有效
  if (!validSortFields.includes(sortBy) || !validOrder.includes(order)) {
    return sendResponse(res, 400, {}, '无效的排序参数。')
  }

  // 读取 Excel 文件中的数据
  const workbook = xlsx.readFile(filePath)
  const worksheet = workbook.Sheets['articles']
  const articlesData = xlsx.utils.sheet_to_json(worksheet)

  // 将中文排序字段转换为对应的数据字段
  const sortFieldMap = {
    创建时间: 'CreatedAt',
    浏览量: 'ReadCount',
    点赞量: 'LikeCount'
  }
  const sortField = sortFieldMap[sortBy]

  // 根据排序字段和顺序对文章数据进行排序
  articlesData.sort((a, b) => {
    if (order === '升序') {
      return a[sortField] > b[sortField] ? 1 : -1
    } else {
      return a[sortField] < b[sortField] ? 1 : -1
    }
  })

  // 计算分页数据
  const startIndex = (pageIndex - 1) * pageSize
  const endIndex = pageIndex * pageSize
  let paginatedArticles = articlesData.slice(startIndex, endIndex)

  // 移除每篇文章中的 Content 字段
  paginatedArticles = paginatedArticles.map((article) => {
    const { Content, ...articleWithoutContent } = article
    return articleWithoutContent
  })

  // 返回分页后的文章数据（不包含 Content 字段）
  return sendResponse(
    res,
    200,
    {
      total: articlesData.length, // 总文章数
      pageIndex: parseInt(pageIndex), // 当前页码
      pageSize: parseInt(pageSize), // 每页条数
      articles: paginatedArticles // 当前页的文章数据 (不包含 Content 字段)
    },
    '文章列表查询成功'
  )
})

module.exports = router
